From: Matthieu Gallien Date: Wed, 19 Feb 2025 08:16:14 +0000 (+0100) Subject: handle errors when automated renaming for name rules is failing X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~2^2~50^2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=095b9581c865171909029a9093040e55ea60a89d;p=nextcloud-desktop.git handle errors when automated renaming for name rules is failing Signed-off-by: Matthieu Gallien --- diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index 1cd9f6f30..23800013b 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -425,17 +425,23 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent case CSYNC_FILE_EXCLUDE_TRAILING_SPACE: item->_errorString = tr("Filename contains trailing spaces."); item->_status = SyncFileItem::FileNameInvalid; - maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded); + if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) { + item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded.")); + } break; case CSYNC_FILE_EXCLUDE_LEADING_SPACE: item->_errorString = tr("Filename contains leading spaces."); item->_status = SyncFileItem::FileNameInvalid; - maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded); + if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) { + item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded.")); + } break; case CSYNC_FILE_EXCLUDE_LEADING_AND_TRAILING_SPACE: item->_errorString = tr("Filename contains leading and trailing spaces."); item->_status = SyncFileItem::FileNameInvalid; - maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded); + if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) { + item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded.")); + } break; case CSYNC_FILE_EXCLUDE_LONG_FILENAME: item->_errorString = tr("Filename is too long."); @@ -475,7 +481,9 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent } item->_errorString = reasonString.isEmpty() ? errorString : QStringLiteral("%1 %2").arg(errorString, reasonString); item->_status = SyncFileItem::FileNameInvalidOnServer; - maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded); + if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) { + item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded.")); + } break; } } @@ -2283,12 +2291,14 @@ void ProcessDirectoryJob::setupDbPinStateActions(SyncJournalFileRecord &record) } } -void ProcessDirectoryJob::maybeRenameForWindowsCompatibility(const QString &absoluteFileName, +bool ProcessDirectoryJob::maybeRenameForWindowsCompatibility(const QString &absoluteFileName, CSYNC_EXCLUDE_TYPE excludeReason) { + auto result = true; + const auto leadingAndTrailingSpacesFilesAllowed = !_discoveryData->_shouldEnforceWindowsFileNameCompatibility || _discoveryData->_leadingAndTrailingSpacesFilesAllowed.contains(absoluteFileName); if (leadingAndTrailingSpacesFilesAllowed) { - return; + return result; } const auto fileInfo = QFileInfo{absoluteFileName}; @@ -2312,10 +2322,11 @@ void ProcessDirectoryJob::maybeRenameForWindowsCompatibility(const QString &abso case CSYNC_FILE_EXCLUDE_TRAILING_SPACE: { const auto renameTarget = QString{fileInfo.absolutePath() + QStringLiteral("/") + fileInfo.fileName().trimmed()}; - FileSystem::rename(absoluteFileName, renameTarget); + result = FileSystem::rename(absoluteFileName, renameTarget); break; } } + return result; } } diff --git a/src/libsync/discovery.h b/src/libsync/discovery.h index d87114d8b..a18fc6014 100644 --- a/src/libsync/discovery.h +++ b/src/libsync/discovery.h @@ -256,7 +256,7 @@ private: */ void setupDbPinStateActions(SyncJournalFileRecord &record); - void maybeRenameForWindowsCompatibility(const QString &absoluteFileName, + bool maybeRenameForWindowsCompatibility(const QString &absoluteFileName, CSYNC_EXCLUDE_TYPE excludeReason); qint64 _lastSyncTimestamp = 0;